import paddlehub as hub
import cv2


def recognize_text_from_image(img_path):
    """
    使用PaddleHub的OCR模型识别图像中的文本，并将识别结果合并成一长串文本。

    参数:
    img_path (str): 要进行OCR的图像路径。

    返回:
    str: 合并后的文本内容
    """
    # 初始化OCR模型
    ocr = hub.Module(name="ch_pp-ocrv3", enable_mkldnn=True)  # mkldnn加速仅在CPU下有效

    # 读取图像并进行OCR识别
    result = ocr.recognize_text(images=[cv2.imread(img_path)])

    # 提取识别到的文字并合并成一长串
    full_text = ""
    for res in result:
        if 'data' in res:
            for entry in res['data']:
                full_text += entry['text']

    return full_text

# 调用函数进行测试
if __name__ == "__main__":
    img_path = "test3.png"
    text = recognize_text_from_image(img_path)
    print(text)  # 可选择在调用处打印文本内容
    # 对文本进行其他操作或处理

# or 传递文件地址调用
# result = ocr.recognize_text(paths=[img_path])

# 参数
#
# paths(list[str]): 图片的路径；
# images(list[numpy.ndarray]): 图片数据，ndarray.shape
# 为[H, W, C]，BGR格式；
# use_gpu(bool): 是否使用 - GPU；若使用GPU，请先设置CUDA_VISIBLE_DEVICES环境变量
# box_thresh(float): 检测文本框置信度的阈值；
# text_thresh(float): 识别中文文本置信度的阈值；
# angle_classification_thresh(float): 文本角度分类置信度的阈值
# visualization(bool): 是否将识别结果保存为图片文件；
# output_dir(str): 图片的保存路径，默认设为
# ocr_result；
# det_db_unclip_ratio: 设置检测框的大小；
# 返回
#
# res(list[dict]): 识别结果的列表，列表中每一个元素为
# dict，各字段为：
# data(list[dict]): 识别文本结果，列表中每一个元素为
# dict，各字段为： - text(str): 识别得到的文本 - confidence(float): 识别文本结果置信度 - text_box_position(
#     list): 文本框在原图中的像素坐标，4 * 2
# 的矩阵，依次表示文本框左下、右下、右上、左上顶点的坐标
# 如果无识别结果则data为[]
# save_path(str, optional): 识别结果的保存路径，如不保存图片则save_path为’’
